def check_token(conn,token):
    #尝试获取并返回令牌对应的用户
    return conn.hget('login:',token)


#更新令牌
import time
def update_token(conn,token,user,item=None):
    timestamp=time.time() #h获取当前时间戳
    conn.hset('login:',token,user) #维持令牌与已登陆用户之间的映射
    conn.zadd('recent:',token,timestamp) #记录领哦哎最后一次出现的时间
    if item:
        conn.zadd('viewed:'+token,item,timestamp) #记录用户浏览郭的商品
        conn.zremrangebyrank('viewed:'+token,0,-26) #移除旧的记录，值保留用户最近浏览过的25个商品



#清理旧会话
import time

QUIT=False
LIMIT=10,000,000

def clean_sessions(conn):
    while not QUIT:
        #目前已有令牌的数量
        size=conn.zcard('recent:')
        if size<=LIMIT:
            #令牌数量未超过限制，休眠1秒后再重新检查
            time.sleep(1)
            continue
        end_index=min(size-LIMIT,100)
        tokens=conn.zrange('recent:',0,end_index-1)

        session_keys=[]
        #为那些将要删除的令牌构建键名
        for token in tokens:
            session_keys.append('viewed:'+token)
        #移除最旧的那些令牌
        conn.delete(*session_keys)
        conn.hdel('login:',*tokens)
        conn.zrem('recent:',*tokens)
